Nginx基础

2019.12.16 星期一 2108

实际操作

  1. nginx 配置和 cgi, fast cgi. 和php-fpm
  2. cd /usr/local/nginx/config/site-enable
    nginx.conf 里面有include sites-enabled/*
  3. 可以配置访问日志,并定义格式;有变量可以使用。access_log,error log;log_format name。
    然后可以根据日志,做一些其他操作。比如,pv,访问/接口,报错,统计等。
  4. nginx (php项目)访问502,可能是 root 文件夹权限不够。
    chmode 777 /var/www/html

  5. 通过service 无法启动;改用nginx指令了。(php-fpm 可以)

  6. 在重启云主机(系统)之后,执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错
    nginx: [error] invalid PID number “” in “/run/nginx.pid”
    <!–
    经过查找,找到http://www.cnblogs.com/yuqianwen/p/4285686.html
    需要先执行
    nginx -c /etc/nginx/nginx.conf

nginx.conf文件的路径可以从nginx -t的返回中找到。

nginx -s reload
–>

  1. Nginx负载均衡的几种模式:轮询,权重轮询,IP_Hash(可以解决Session失效重新登录问题;配合upstream),Fair,Url_hash

  2. (ajax:post) 访问405: 因为用rewrite 重写了 host/mtouch/project.html 到/var/www/hosts
    get请求是没问题的。用ajax 提交post请求报405.
    网上有说把,post 转为get 的。但是未采用,担心参数等问题。
    最后用proxy 代理,还需要设置头部。

    • proxy_set_header Host $host; 作用web服务器上有多个站点时,用该参数header来区分反向代理哪个域名。比如下边的代码举例。
    • proxy_set_header X-Forwarded-For $remote_addr; 作用是后端服务器上的程序获取访客真实IP,从该header头获取。部分程序需要该功能。
  3. X-Forwarded-For: 记录访问ip 来源/路径
  4. rewrite 和proxy 的区别
    rewrite ;
    IF判断和内置全局环境变量

  5. 在nginx中配置proxy_pass代理转发时
    如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。
第一种:
location /proxy/ {
proxy_pass http://127.0.0.1/;
}
代理到URL:http://127.0.0.1/test.html

第二种(相对于第一种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1;
}
代理到URL:http://127.0.0.1/proxy/test.html

第三种:
location /proxy/ {
proxy_pass http://127.0.0.1/aaa/;
}
代理到URL:http://127.0.0.1/aaa/test.html

第四种(相对于第三种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}
代理到URL:http://127.0.0.1/aaatest.html

  1. alias。 阅读打卡,vue 单页应用 两个项目,使用同一域名。
    开始直接代码到 8088, js,css 文件的content-type错误,导致页面空白。
    添加/readingpunch_admin alias 就好了。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    service nginx reload # 重新载入nginx配置
    ## 启动nginx
    service nginx restart # 重启
    systemctl start nginx
    # 设置开机启动
    systemctl enable nginx
    # 查看nginx 启动状态
    systemctl status nginx
    # 查看是否监听
    ps -tnl | grep 80

    几个命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    nginx -v
    nginx -V
    # 进入到nginx 安装目录
    ## 启动nginx
    ./nginx.exe # 前台程序
    start nginx # 进入到后台
    ./nginx.exe -s reload :修改配置后重新加载生效
    ./nginx.exe -s reopen :重新打开日志文件
    ./nginx.exe -t -c /path/to/nginx.conf # 测试nginx配置文件是否正确;## 不指定配置文件则为默认

    ## 关闭nginx:
    ./nginx.exe -s stop # 快速停止nginx,可能并不保存相关信息
    ./nginx.exe -s quit # 完整有序的停止nginx,并保存相关信息

    配置文件

    nginx.conf。
    设置日志位置。(默认在nginx安装目录下)移到其他位置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    error_log  D:/var/log/nginx-error.log;
    http {
    include mime.types;
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log D:/var/log/nginx-access.log main;

    include vhosts/*.conf
    }

    ssi

    SSI:Server Side Include,是一种基于服务端的网页制作技术。它的工作原理是:在页面内容发送到客户端之前,使用SSI指令将文本、图片或代码信息包含到网页中。对于在多个文件中重复出现内容,使用SSI是一种简便的方法,将内容存入一个包含文件中即可,不必在所有文件中重复。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。

    三个参数可以放在http,server,或location作用域下。

    1
    2
    3
    4
    5
    location ~ \.shtml$ {
    ssi on;
    ssi_silent_errors on;
    ssi_types text/shtml;
    }

    <!--# command parameter1=value1 parameter2=value2 ... -->

    1
    2
    <!--#include file="head.shtml"-->
    <!--#include virtual="/site/gc/wap/list/head.shtml"-->

    file文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。

    virtual文件名是一个web请求路径,当然应该是本服务器上的。可以是绝对或相对路径,但不能通过”..”访问上层路径。

knowledge is no pay,reward is kindness
0%